Kryptografia - sprawdź czy potrafisz przeczytać

Program nawiązuje do eksperymentu opartego na badaniach przeprowadzonych przez brytyjskic naukowców mówiących o tym, że przy czytaniu tekstu nieważna jest kolejność liter o ile pierwsza i ostatnia pozostaje na swoim miejscu, poieważ mózg “widzi” słowa jako całość. (więcej m.in. na stronie http://obcyjezykpolski.strefa.pl/?md=archive&id=329). Program dokonuje losowej permutacji liter wewnątrz tekstu zachowując układ dwóch pierwszych i dwóch ostatnich liter w słowie.

Aby wczytać do programu tekst, którego modyfikacji chcemy dokonać, należy zapisać go w tym samym folderze, w którym zapisany jest notbook zawierający program. Plik importujemy za pomocą funkcji Import [“przykladowytekst.txt”]. Możemy zdefiniować, że z pliku ma zostać wczytany tylko tekst : Import [“przykladowytekst.txt”,”Text”], a także zdefiniować kodowanie znaków (wygodnie jest tekst nad którym pracujemy zapisać w kodowaniu UTF-8 -zawiera on m.in. polskie znaki) : Import[“przykladowytekst.txt”,”Text”, CharacterEncoding->”UTF-8”]

Aby dokonać permutacji , stosujemy na zaimportowanym pliku fukncję encode[]. (Wygodnie jest zaimportowany tekst oznaczyć jako zmienna np. text=Import[“przykladowytekst.txt”,”Text”, CharacterEncoding->”UTF-8”], a następnie użyć funkcji encode[text]).

Kod

Perm[positions_List] := Thread[positions -> RandomSample[positions, Length[positions]]]

SetDirectory[NotebookDirectory[]]

{1,8,9,5,6,2,11,10,3,4,7,12}
Clear[g]

g[text_List, n_] := text[[n]]

g[{"a","b","c"}, 3]

specialCharacters = {"!", ".", ",", "?", ";", ":"}

Clear[encodeWord]
encodeWord =Function[str, 
	len = StringLength[str];
charSequ = Characters[str];
permutation = If[MemberQ[specialCharacters, charSequ[[len]]],
midPerm = Perm[Range[3, (len-3)]];
Join[midPerm, {1->1, 2->2, (len-2)->(len-2), (len-1)->(len-1),len->len}],
midPerm = Perm[Range[3, (len-2)]];
Join[midPerm, {1->1, 2->2, (len-1)->(len-1),len->len}]];
encodedPositions = Range[1, len]/.permutation;
encodedCharSequ = Map[g[charSequ, #]&, encodedPositions];
encodedString = StringJoin[encodedCharSequ];
encodedString];

Clear[encode]
encode = Function[str,
wordsList = encodeWord /@ StringSplit[str];
encodedText = StringJoin[wordsList];
Fold[#1<>" "<>#2&, First[wordsList], Rest[wordsList]]];

encode["Ala ma kota, glupiego!"]

Prezentacja działania

text = Import["text.txt", "Text", CharacterEncoding -> "UTF8"]
encode[text]

text2=Import["angielski.txt","Text",CharacterEncoding -> "UTF-8"]
encode[text2]